#include <stdio.h>
#include <string.h>
#include <stdbool.h>


#include "co_printf.h"
#include "plf.h"

#include "driver_gpio.h"


volatile struct gpio_reg_exti0_t *gpio_reg_exti0 = (volatile struct gpio_reg_exti0_t *)GPIO_PORT_EXTI0;
volatile struct gpio_reg_exti1_t *gpio_reg_exti1 = (volatile struct gpio_reg_exti1_t *)GPIO_PORT_EXTI1;

/*********************************************************************
 * @fn     gpio_set_func
 *
 * @brief   set  gpio port interrupt  enable
 *
 * @param   port        - @ref system_port_t.
 *          bit         - get gpio port pin @ref system_port_bit_t
 *          func        - function value. @ref gpio_func_t
 *
 * @return  None.
 */
void gpio_set_func(enum system_port_t port,enum system_port_bit_t bit,enum gpio_func_t func)
{
    switch(port)
    {
        case GPIO_PORT_A:
            gpio_reg_exti0->pa_inten = ((gpio_reg_exti0->pa_inten  & (~(1<<bit))) | (func<<bit));
            break;
        case GPIO_PORT_B:
            gpio_reg_exti0->pb_inten = ((gpio_reg_exti0->pb_inten  & (~(1<<bit))) | (func<<bit));
            break;
        case GPIO_PORT_C:
            gpio_reg_exti0->pc_inten = ((gpio_reg_exti0->pc_inten  & (~(1<<bit))) | (func<<bit));
            break;
        case GPIO_PORT_D:
            gpio_reg_exti0->pd_inten = ((gpio_reg_exti0->pd_inten  & (~(1<<bit))) | (func<<bit));
            break;
        case GPIO_PORT_E:
            gpio_reg_exti1->pe_inten = ((gpio_reg_exti1->pe_inten  & (~(1<<bit))) | (func<<bit));
            break;
    }
}

